import java.util.Random;

public class Pisarz implements Runnable{
    Biblioteka b;
    public Pisarz(Biblioteka b){
        this.b = b;
    }

    public void ustawTrue(){
        synchronized(b){
            b.setFlag(true);
            System.out.println("Pisarz czeka (osob: "+b.ileCzytelnikow()+")");
        }
    }

    public void ustawFalse(){
        synchronized(b){
            b.setFlag(false);
            System.out.println("Koniec zmian (osob: "+b.ileCzytelnikow()+")");
        }
    }

    //chcemy zmienic ksiazke
    public void zmien(){
        synchronized(b){
            //dopoki ktos jeszcze czyta nie mozemy zmienic ksiazki
            while(!b.czyKtosCzyta()){
                try{
                    b.wait();
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
            }
            //zmieniamy
            b.zmien();
        }
    }

    public void run(){
        while (true) {
            //pisarz gotowy do pracy
            ustawTrue();
            zmien();
            //pisarz skonczyl prace
            ustawFalse();
            try{
                Thread.sleep(new Random().nextInt(2000));
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
